package modules.jucAuxiliary;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

/**
 * JUC 常用的辅助类
 *      CountDownLatch
 *      这个类使一个线程等待其他线程各自执行完毕后再执行。
 *      主要有两个方法，当一个线程或多个线程调用await方法，这些线程会阻塞。
 *      其他线程调用countDown方法会将计数器减1（调用方法的线程不会阻塞）
 *      当计数器为0，因await方法阻塞的线程会被唤醒，继续执行。
 * @author shengren.yan
 * @create 2021-03-10
 */
public class Auxiliary1 {

    public static void main(String[] args) throws InterruptedException {
        //总数6个
        CountDownLatch countDownLatch = new CountDownLatch(6);

        for (int i = 1; i <= 6 ; i++) {
            new Thread(()->{
                System.out.println(Thread.currentThread().getName() +" 离开");
                //每个线程都数量-1
                countDownLatch.countDown();
            },String.valueOf(i)).start();
        }
        //等待计数器归零。 await等待计数器为0，就唤醒，再继续向下运行。
        countDownLatch.await();
        System.out.println("关门，必须其他线程都执行完，在执行这里");
        //最后执行的...

    }

}
